package hanxx.security.service;

import hanxx.common.utils.AjaxResult;
import hanxx.security.dao.SysUserDao;
import hanxx.security.domain.SysUser;
import hanxx.security.domain.SysUserLogin;
import hanxx.system.page.PageDomain;
import hanxx.system.page.TableDataInfo;
import hanxx.system.service.BaseService;

import java.util.List;

/*
 * edit:韩鑫鑫
 * 部门:产品研发三部
 */

public interface SysUserService extends BaseService<SysUser, SysUserDao> {
    AjaxResult login(SysUser user);

    /**
     * 新增或者刷新redis里面的userlogin信息
     * @param userLogin
     */
    void flushUserLogin(SysUserLogin userLogin);

    AjaxResult loginout();

    TableDataInfo getUsers(SysUser sysUser, PageDomain pageDomain);

    String importData(List<SysUser> sysUsers, boolean updateSupport);

    /**
     * 根据条件分页查询已分配用户角色列表
     * @param user
     * @param pageDomain
     * @return
     */
    TableDataInfo selectAllocatedList(SysUser user, PageDomain pageDomain);

    /**
     * 查询未分配用户角色列表
     * @param user
     * @param pageDomain
     * @return
     */
    TableDataInfo selectUnallocatedList(SysUser user, PageDomain pageDomain);

    void flashLastLoginTimeAndIp(SysUser sysUser);

    /**
     * 线程存储信息
     */
    void threadLocal();
    /**
     * kafka生产者测试
     */
    void kafkaMqProduct();

    /**
     * kafka消费者测试
     * @param foo
     */
    void listen1(String foo);
    void listen2(String foo);

    /**
     * 基于redis的分布式锁，测试
     * @param orgId
     * @return
     */
    String pay(Long orgId);

    void testOtherPleace();

    /**
     * 时间轮使用练习
     */
    void hashedWheelTimer();

    /**
     * 基于redis的分布式锁，测试，使用了redisson依赖
     * @param orgId
     * @return
     * @throws InterruptedException
     */
    String payRedisson(Long orgId) throws InterruptedException;
}
